Unity |
您所在的位置:网站首页 › unity 动画切换 闪 › Unity |
系列文章目录
一 、 人物移动和转向
二、 人物跳跃和落地
三、 人物攻击和判定
四、 人物受伤和死亡
目录 前言 一、人物受伤逻辑分析 二、人物受伤和死亡动画逻辑 三、人物受伤脚本实现 1.Damageable脚本(受击对象上) 2.IMessageReceiver接口 2.IMessageReceiver接口实现(PlayerController上) 总结 前言上一章记录了人物的攻击实现和攻击有效判定,这里实现人物的受伤判定。 实现效果:(敌人的实现见下一章) 提示:以下是本篇文章正文内容,下面案例可供参考 一、人物受伤逻辑分析三个主要脚本: Damageable脚本,挂在受攻击对象上,负责接收从对方武器(meleeWeapon)传递的伤害信息,对伤害(Message)进行处理 --> 根据不同的受击效果调用不同委托事件 --> 最后将必要的信息传递给伤害接收者。(当然不一定要有接收者,看有没有需要复杂信息传递) IMessageReceiver接口: 自行定义的接口,在有需要接收伤害信息的对象上实现接口,实现在不同对象受伤或死亡的复杂伤害信息接收。 二、人物受伤和死亡动画逻辑定义两个trigger参数,连接到在Anystate上; 这个脚本存储了玩家的血量,对伤害的接收处理,和不同伤害事件的响应。 编辑器中的设置: 代码如下(示例): using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; //My受伤反馈脚本 namespace MyPlayer { public partial class MyDamageable : MonoBehaviour { [SerializeField] protected int curHitPoints;//当前血量 protected Action schedule;//多播委托 protected float myInvincibleTime = 3.5f;//无敌时间 public int myMaxHipPoints;//最大血量 public bool invincible = false;//无敌的 public TextMesh m_HitPointsShow;//血量显示 public UnityEvent OnDamage, OnDeath, OnResetDamage, OnBecmeVulnerable, OnHitWhileInvulunerable;//不同的受伤事件 //[EnforceType(typeof(MyMessage.IMessageReceiver))] //public MonoBehaviour[] DemageReceiver; public List onDamageMessageReceivers;//伤害接收者,不一定有必要 public int CurHitPoint { get { return curHitPoints; } } public void OnReSpawn()//复活 { invincible = true; myInvincibleTime = 3.5f; OnResetDamage.Invoke(); curHitPoints = myMaxHipPoints; } private void Awake() { curHitPoints = myMaxHipPoints; invincible = false;//开始有一段无敌时间 if(m_HitPointsShow) m_HitPointsShow.text = curHitPoints.ToString(); } //受到攻击时调用 public bool OnGetDamage(MyDamageable.DamageMessage data) { MyMessage.MesssageType type; if (invincible || curHitPoints |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |